UniCommon機能解説 - KVS
KVSモジュールには、シンプルなKey Value Storageのクラスがあります
ユーザの設定情報やAnalytics情報などをローカルの端末に簡単に保存したい場合などに利用できます
KeyVaulueStorage
以下のように使います
code:cs
var kvs = KeyValueStorage.Prefixed("MyStore");
kvs.Upsert("int", 1);
kvs.Upsert("bool", false);
kvs.Upsert("string", "moji");
kvs.Upsert("float", 1.22);
kvs.Upsert("date", DateTime.Now); // これだけは拡張メソッド
保存可能な形式は、int, bool, string, floatと拡張メソッド経由でDateTimeです
DateTimeはISO8701形式文字列に変換されて保存されます
PlayerPrefsは運用上問題がないわけではない(DBのように使うべきでない)のですが、Unityが公式で提供しているだけあって、特別な設定が必要ないのが簡単です
とはいえ、ファイルベースで永続化するため、初期化や保存に時間が掛かるのがデメリットです
ストレージにプレフィクスを付与する必要があるのは、各キーの一意性をストレージインスタンス単位にするためです
例えば、上記の例の場合実際のPlayerPrefsには、MyStore.key1のようなキーとして保存されます
KeyValueStorageSecure
KeyValueStoragePlayerPrefsと、保存時のミドルウェアとしてCrypter、Versionedを用い、バージョンつき暗号化データをPlayerPrefsに保存します
Keyは暗号化されませんが、秘密鍵がバレない限り、現実的に解読不可能です
暗号化KVSは以下のように作成します
code:cs
var kvs = KeyValueStorage.Prefixed("MyStore");
var kvss = KeyValueStorage.Secure(
"MyStoreSecure", // プレフィクス
Application.version, // Versionedに使うバージョン
version => Crypter.Default(() => "secret"), // 暗号化/復号化に使うCrypterのプロバイダ
kvs
);
任意のKeyValueStorageをバックエンドに作成できます
第三引数は、バージョン文字列を引数に取るCrypterのプロバイダです
これによって、暗号化したバージョンと復号化するバージョンでCrypterが違う場合でも復号化に失敗しないような設計に出来ます
未来に渡って暗号化の秘密鍵を変える予定がない場合は、上記のような作成方法でも問題ありません